import java.util.HashMap;
import java.util.Map;

public class MinimumNumberFrogsCroaking {
    public int minNumberOfFrogs(String croakOfFrogs) {
        String s = "croak";
        int n = s.length();
        int[] hash = new int[n];

        // key-元素  value-元素下标(即 "croak" 每个元素的下标)
        Map<Character, Integer> index = new HashMap<>();
        for(int i = 0; i < n; i++) {
            index.put(s.charAt(i), i);
        }

        char[] ch = croakOfFrogs.toCharArray();
        for(char x : ch) {
            if(x == s.charAt(0)) {
                // 如果当前字符等于 'c'
                if(hash[n-1] != 0) {
                    // 有空闲青蛙, 匀一只去蛙鸣, 最后一个字母个数 -1
                    hash[n-1]--;
                }
                hash[0]++; // 第一个字母个数 +1 (有青蛙准备蛙鸣)
            }else {
                // 如果是 'r/o/a/k', 拿到对应下标
                int i = index.get(x);
                if(hash[i - 1] == 0) {
                    // 如果在喊当前字母时, 前驱字母没喊, 说明发不出声音
                    return -1;
                }
                hash[i - 1]--; // 前一个字母个数-1
                hash[i]++; // 当前字母个数 +1
            }
        }

        // 第二种返回 -1 的情况
        for(int i = 0; i < n - 1; i++) {
            if(hash[i] != 0) {
                return -1;
            }
        }
        return hash[n-1];
    }
}
